package cn.itcast.syntax

/**
  * @Package cn.itcast.syntax
  * @author KTL
  * @date 2021/5/14 0014 17:35
  * @version V1.0
  * @Copyright © 2015-04-29  One for each, and two for each
  *           desc 演示scala循环
  */
object Demo06_Loop {
  def main(args: Array[String]): Unit = {
      val list1 =1 to 10      //1-10
      val list2 =1 until 10   //1-10 不包括10
      val list3 =1 to 10 by 2 //1-10 步长为2

    println(list1.toBuffer)
    println(list2.toBuffer)
    println(list3.toBuffer)//(1, 3, 5, 7, 9)

  //注意1：普通遍历
    for(i<-list1){
      println(i)
    }


    println("华丽丽分割线--------------")
    //注意2：遍历list1中的偶数  -使用守卫/卫语句
    for(i<-list1 if i%2==0){
      println(i)
    }

    println("for 推导式")
    val result =  for (i<-list1 ) yield i*10
    println(result.toBuffer)

    println("----普通for循环----")
    for(i<-1 to 9 ){
      for(j<-1 to 9 ){
        if(i>=j){
        print(s"${j}*${i}=${j*i} ")
        }
      }
      println()
    }

    println("----嵌套for循环--简写--")
    for(i<-1 to 9 ;j<-1 to 9){
      if(i>=j){
        print(s"${j}*${i} = ${j*i} ")
      }
      if(j==9){
        println()
      }
    }

    //while、for本身没有值，结果是unit类型 ，用值接收没有意义
    var result6 = for(i<-list1){}
    println(result6)


//    println("强制------0------")
//    var result7 = for(i<-list1){return 0 }
//    println(result7)



    //注意scala中没有break和continue
//    for(i<-list1){
//      if(i==5){
//        break;
//      }
//    }
    //提供了其他方式       实现break ，breakable包含整个for，实现后，跳出整个for
    import scala.util.control.Breaks._
    breakable{
      for(i<- 1 to 10){
        if(i>=5)
          break()
        else
          println(i)
      }
    }

    println("====breakable====")  //跳出当前循环，实现continue
    for(i<-1  to 10 ){
      breakable{
        if(i%3== 0 )
          break()
        else println(i)
      }
    }


  }
}
